#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  

int main() {  
    // 原始数据  
    const char *source = "Hello, World!";  
    
    // 动态分配内存，用于存储复制的数据  
    char *destination = (char *)malloc(strlen(source) + 1); // +1 for null terminator  

    // 检查内存分配是否成功  
    if (destination == NULL) {  
        fprintf(stderr, "Memory allocation failed\n");  
        return 1;  
    }  

    // 进行内存复制  
    memcpy(destination, source, strlen(source) + 1); // 复制包括终止符  

    // 输出原始数据和目标数据  
    printf("Source: %s\n", source);  
    printf("Destination: %s\n", destination);  

    // 修改目标数据  
    strcpy(destination, "Goodbye!");  

    // 查看目标数据修改后的值  
    printf("Modified Destination: %s\n", destination);  
    
    // 释放分配的内存  
    free(destination);  

    return 0;  
}
